package com.doit.day05

import java.io.{FileOutputStream, ObjectOutputStream}
import scala.beans.BeanProperty

object _07_样例类 {
  def main(args: Array[String]): Unit = {

    val dog1: Dog1 = new Dog1(1, "旺财")
    val dog2: Dog1 = new Dog1(1, "旺财")
//    println(dog1)//com.doit.day05.Dog1@7e0babb1
//    val stream: ObjectOutputStream = new ObjectOutputStream(new FileOutputStream("d:\\a.txt"))

    println(dog2.hashCode())//1908923184
    println(dog1.hashCode())//1844169442

//    println(dog1.equals(dog2))//false

    val dog3: Dog = Dog(1, "旺财")
    val dog4: Dog = Dog(1, "旺财")
//    println(dog3)//Dog(1,旺财)
//    stream.writeObject(dog3)
//    println(dog3.equals(dog4))//true
    println(dog3.hashCode())//1688431567
    println(dog4.hashCode())//1688431567

  }
}

//用case class修饰的类叫样例类
//属性默认就是val修饰的，可以不写，底层会自动给你补上
//他底层给我们写了apply方法==》 必然实现了伴生类伴生对象
//他还很贴心的给我们写了toString方法
//还给我们实现了序列化的接口
//还给我们重写了equals方法和hashcode方法
//因为还给我们重写了unapply方法 可以很好的运用于模式匹配
case class Dog(
              @BeanProperty
                id:Int,
              @BeanProperty
                name:String)

class Dog1(val id:Int,val name:String)
